package com.fang.algorithm.zuo.subsearch;

/**
 * @author lingxiao.fang
 * @Desc 局部最小值问题
 * 1.无序
 * 2.相邻不想等
 * 找到其中一个局部最小值的位置
 * 1 返回 0
 * 1 2 返回 0
 * 2 1 2 返回 1
 * @createTime 2025/2/6 15:25
 */
public class Test02_PartLeast {
    public static void main(String[] args) {
        int[] arr = {10, 9, 7, 8, 5, 11, 6, 4, 3, 2, 4};
        int ansIndex = partLeast(arr);
        System.out.println(ansIndex);
    }

    private static int partLeast(int[] arr) {
        if (arr == null || arr.length == 0) {
            return -1;
        }
        if (arr.length == 1 || arr[0] < arr[1]) {
            return 0;
        }
        if (arr[arr.length - 1] < arr[arr.length - 2]) {
            return arr.length - 1;
        }
        int left = 1;
        int right = arr.length - 2;
        while (left < right) {
            int mid = (left + right) / 2;
            if (arr[mid] > arr[mid - 1]) {
                // 上升趋势，继续二分
                right = mid - 1;
            } else if (arr[mid] > arr[mid + 1]) {
                // 下降趋势，继续二分
                left = mid + 1;
            } else {
                return mid;
            }
        }
        return left;
    }
}
